During the past couple of months at the university we learned about how a business should operate and how a project should be managed. This included things like risk assessment, tool usage, team management and other stuff that they say you should do so you are sure the blame is on the client when something goes wrong. As it is custom with this courses we received a final project and 2 months to create it. The application we needed to create was a Theatre manager that will keep count of all the tickets sold and customers email addresses and also make life easier for the men behind the counter.
All was nice and good when we started. We had regular meetings where all the members of the team were active and everyone contributed equally to the idea of the software. What we didn t realised at that moment was that everyone was talking high language. We needed a database to manage the customers, an easy concept, you put data in, get it out, parse it and there it is... or so we thought. Design was the same, we came up with couple of different designs for the database, some efficient with a lot of tables and some less so, but in which the data would be easier to retrieve. And here is where I think we made our first mistake, we assumed that with a perfect design the software would be easy to code, one thing that almost never happen and everyone in the industry will tell you that a god product is made out of iterations, not a magic bullet, one time development.
Speed up till 2 weeks before deadline, here we were still talking design, I made some prototypes for the part that we thought would be the most complicated, the seat display, but that was all. Queue the next mistake: at this time one of ours guy panicked and started working on the program all by himself, he redesigned the database as he seemed right, created the classes and made a UI for the software, then stopped. Saying that he did enough work and we should take the project and finish it. That's where teamwork should have come into play, more communication would have allowed us to take in consideration some use cases that we discovered just when we had less than 24 hours to finish the project.
But let's take it one step at a time, there was one week left, I realised that I had no idea how the software is supposed to work now and started asking the one how singlehanded designed it, fortunately he is one of my friends so he was glad to help with walking me through his work. From all I understood we still needed to link the database with the UI, make queries for the database and test the whole thing.
Two more days pass and the database manager is now working, I coded a tab of the UI and started to notice the hoops I have to jump through to get the data out of the data base. Because of a fragmented database I need to make multiple queries to get something simple as the price of a booking or the name of a play if I have a performance ID.
At this point the only way we were going to finish the project was to have a 24h development period just before the deadline. All said and done, I woke up at around 10, well rested and ready to work, I arrive in the lab at around 12 and start coding the first tab together with 2 more teammates. I should mention that the guy how made the first piece of code was also working on the seat arrangement in the UI, even if he did them properly (auto generating at runtime using info from the data base), it was a lot of work that could have gone in some other part of the program. At around 5PM we left the lab and headed to one of my friend home to keep working there. It was not necessary a mistake but, we lost 3 hours eating and revving up the coding again. 11PM and we finished the Create Booking button. Another change to the location had to be made, 12.30PM we start coding again. Sometime later and a lot of sweat we finish coding the Edit Booking Button. A lot of weird queries had to be made and tested, that lost us a lot of time that could have been saved by better designing the database. Now the time was 5AM and there were still things that didn't work. We decided that our last push is going to be making the software work well with a persistent database, till now we only started the project with an empty one, apparently when you put data in it there were some other functions that were called and that we didn't knew about. Great, another 2 hours of bug fixing.
Around 8AM I went home, as we were happy with the state of the program, we submitted a last version or so I thought. On the way home I started thinking of more improvements to the software, that made me stay awake another hour. 9AM and I am going to sleep. 11.30AM phone ring that said the software is not compiling, just like usual, fortunately was a problem that we knew about so it was an easy fix. As I was awake I started thinking again about improvements.
12.30 and I am back in the Lab. There I find another team that is as late as us. Some more bug fixes later and I submit a "More" final version that the last one, just 20 min before the deadline. Yey! Now I can sleep till the next day, or so I thought, when I arrived home I realized the executable that we sent had a bug in it, bummer, we sent in the source code as well so it's not the end of the world, but it's enough to make me not sleep well.
Now that the whole thing is done all I can say is that extensive planning is not always the right solution and a prototype/iteration development cycle would have worked better for us. Also, if you want to see the mess in the code that we created, the project is up here